package com.mxnet.chongjin.supoman.utils;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.charset.Charset;

/**
 * author: Administrator
 * email: lcj270018655@163.com
 * date: 2018/5/7
 */

public class TCPUtils {
    public static String TCP_sendMsg(String ip, int port, String msg) {
        Socket socket = null;
        OutputStream output = null;
        InputStream input = null;
        StringBuffer sb = null;
        try {
            // socket = new Socket(InetAddress.getByName("192.168.1.100"), 8888);//这种形式也行
            socket = new Socket(ip, port);// 第一个参数是目标主机名或目标主机的ip地址，第二个参数是目标主机端口号
            output = socket.getOutputStream();
            output.write(msg.getBytes());// 把msg信息写入输出流中
            //--------接收服务端的返回信息-------------
            socket.shutdownOutput(); // 一定要加上这句，否则收不到来自服务器端的消息返回 ，意思就是结束msg信息的写入
            input = socket.getInputStream();
            byte[] b = new byte[1024];
            int len = -1;
            sb = new StringBuffer();
            while ((len = input.read(b)) != -1) { 
                sb.append(new String(b, 0, len, Charset.forName("utf-8")));// 得到返回信息
            }
            return sb.toString().trim();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                // 注意，输出流不需要关闭，因为它只是在Socket中得到输出流对象，并没有创建
                if (socket != null) {
                    socket.close();// 释放资源，关闭这个Socket
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString().trim();
    }

    public static String TCP_sendMsg(String ip, int port, byte[] msg) {
        Socket socket = null;
        OutputStream output = null;
        InputStream input = null;
        StringBuffer sb = null;
        try {
            // socket = new Socket(InetAddress.getByName("192.168.1.100"), 8888);//这种形式也行
            socket = new Socket(ip, port);// 第一个参数是目标主机名或目标主机的ip地址，第二个参数是目标主机端口号
            output = socket.getOutputStream();
            output.write(msg);// 把msg信息写入输出流中
            //--------接收服务端的返回信息-------------
            socket.shutdownOutput(); // 一定要加上这句，否则收不到来自服务器端的消息返回 ，意思就是结束msg信息的写入
            input = socket.getInputStream();
            byte[] b = new byte[1024];
            int len = -1;
            sb = new StringBuffer();
            while ((len = input.read(b)) != -1) {
                sb.append(new String(b, 0, len, Charset.forName("utf-8")));// 得到返回信息
            }
            return sb.toString().trim();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                // 注意，输出流不需要关闭，因为它只是在Socket中得到输出流对象，并没有创建
                if (socket != null) {
                    socket.close();// 释放资源，关闭这个Socket
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString().trim();
    }
}
